package net.lab1024.sa.base.utils;

import com.alibaba.fastjson.JSONObject;
import java.util.LinkedHashMap;
import java.util.Map;

/**
        * Markdown格式的键值对消息（原始数据）
        * 用于企业微信机器人消息推送
 */
public class KvMarkdownMessage extends WeComMessage {
    private final Map<String, Object> data = new LinkedHashMap<>();
    private String title;
    private boolean useTableStyle = false; // 是否使用表格样式

    public KvMarkdownMessage(String webhookUrl) {
        super(webhookUrl);
    }

    /**
            * 添加键值对字段
     * @param key 字段名
     * @param value 字段值
     * @return 当前对象，支持链式调用
     */
    public KvMarkdownMessage addField(String key, Object value) {
        data.put(key, value);
        return this;
    }

    /**
            * 设置消息标题
     * @param title 标题文本
     * @return 当前对象，支持链式调用
     */
    public KvMarkdownMessage setTitle(String title) {
        this.title = title;
        return this;
    }

    /**
            * 启用或禁用表格样式
     * @param enable 是否启用表格样式
     * @return 当前对象，支持链式调用
     */
    public KvMarkdownMessage useTableStyle(boolean enable) {
        this.useTableStyle = enable;
        return this;
    }

    @Override
    protected String getMsgType() {
        return "markdown";
    }

    @Override
    protected JSONObject buildMessageBody() {
        StringBuilder markdown = new StringBuilder();
        JSONObject messageBody = new JSONObject();
        messageBody.put("msgtype", "markdown");

        // 添加标题
        if (title != null) {
            markdown.append("### ").append(title).append("\n");
        }

        // 添加内容
        if (useTableStyle) {
            data.forEach((k, v) -> {
                markdown.append("> **").append(k).append("**: ").append(v).append("\n");
            });
        } else {
            data.forEach((k, v) -> {
                markdown.append("> **").append(k).append("**: ").append(v).append("\n");
            });
        }

        // 构建消息体
        JSONObject markdownContent = new JSONObject();
        markdownContent.put("content", markdown.toString());
        messageBody.put("markdown", markdownContent);

        return messageBody;
    }
}